package com.ideaaedi.zoo.example.springboot.bpmn.flowable.controller.demo6.enums;

import com.ideaaedi.zoo.commonbase.enums.EnumDescriptor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.Collection;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 运行时任务的业务状态（即：工作流运行时任务的业务状态）
 * <pre>
 * 对于工作流本身来讲，ACT_RU_TASK表中可能同时存在多个任务（即：同时存在对个进行中的任务）
 * 但是从业务系统来看，这些工作流表中的进行中的任务，可能只有部分任务才算是业务意义上的"进行中"，即：
 * 我们需要对工作流中进行中的任务，再进行业务上的状态细分。 这就是这个枚举的由来
 * </pre>
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 1.0.0
 */
@Getter
public enum RunningTaskBizStateEnum implements EnumDescriptor {

    NOT_START("尚未开始"),
    RUNNING("进行中"),
    PASS("通过"),
    REJECT("不通过"),
    CANCEL("已取消"),
    ;

    private final String desc;

    RunningTaskBizStateEnum(String desc) {
        this.desc = desc;
    }

    @Override
    public String obtainDescription() {
        return this.desc;
    }

    /**
     * 判断容器中是否包含指定的target
     *
     * @param container 元素容器
     * @param target 判断的内容
     *
     * @return 容器中是否包含指定的target
     */
    public static boolean contain(Collection<RunningTaskBizStateEnum> container, String target) {
        if (CollectionUtils.isEmpty(container)) {
            return false;
        }
        if (StringUtils.isBlank(target)) {
            return false;
        }
        Set<String> nameSet = container.stream()
                .filter(Objects::nonNull)
                .map(RunningTaskBizStateEnum::name)
                .collect(Collectors.toSet());
        return nameSet.contains(target);
    }
}
